#include<stdio.h>
const int maxn=100;
int a[maxn][maxn]={0},d[maxn][maxn];
int s[maxn][maxn]={0};
int n,sum=0;
int test(int x,int y,int k)
{
	for(int i=0;i<n;i++){
		if(d[i][y]==k||d[x][i]==k)
			return 0;
	}
	return 1;
}
void dfs(int x,int y)
{
	if(x>=n){
		sum++;
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++)
				printf("%d ",d[i][j]);
			printf("\n");
		}
		printf("\n");
		return;
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			d[i][j]=a[i][j];
			if(a[i][j]!=0||s[i][j]) continue;
			for(int k=1;k<=9;k++){
				if(test(i,j,k)){
					d[i][j]=k;
					s[i][j]=1;
					if(j+1==n)
						dfs(i+1,0);
					else
						dfs(i,j+1);
					s[i][j]=0;
				}
			}
		}
	}
}
int main()
{
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	}
	dfs(0,0);
	printf("%d",sum);
	return 0;
}
